'use client'; import { Price, Button, LoaderSpinner, Link } from '@theme/components'; import { Image } from '@akinon/next/components/image'; import clsx from 'clsx'; import { SalesContractModal } from '@theme/views/sales-contract-modal'; import { useGetOrderQuery } from '@akinon/next/data/client/account'; import { useEffect, useState } from 'react'; import { useParams } from 'next/navigation'; import { OrderDetailHeader } from '@theme/views/account/orders/order-detail-header'; import { ROUTES } from '@theme/routes'; import { useLocalization } from '@akinon/next/hooks'; import settings from 'settings'; import { getOrderStatus } from 'utils'; const AccountOrderDetail = () => { const { id } = useParams<{ id: string }>(); const { locale, t } = useLocalization(); const localeValue = settings.localization.locales.find( (locale_) => locale_.value === locale ).apiValue; const { data: order, isLoading, isSuccess, isFetching } = useGetOrderQuery(id); const [orderDate, setOrderDate] = useState(''); const groupedOrder = []; if (order) { const groupedData = order?.orderitem_set?.reduce((groups, item) => { const { tracking_number } = item; if (!groups[tracking_number]) { groups[tracking_number] = []; } groups[tracking_number].push(item); return groups; }, {}) || {}; const result = Object.values(groupedData); groupedOrder.push(...result); } useEffect(() => { if (isSuccess) { const shortDate = new Date(order.created_date).toLocaleDateString( localeValue, { day: 'numeric', month: 'long', year: 'numeric' } ); setOrderDate(shortDate); } }, [order, isSuccess, localeValue]); if (isLoading && isFetching) { return (
); } if (!order) { return (

{t('account.my_orders.detail.no_orders_found')}

); } return (
{t('account.my_orders.detail.order_date')}: {orderDate}
{order?.orderitem_set?.length}{' '} {t('account.my_orders.detail.products')} {groupedOrder?.length}{' '} {t('account.my_orders.detail.packages')}
{t('account.my_orders.detail.delivery_address')}:{' '} {order?.shipping_address?.line}{' '} {order?.shipping_address?.district?.name}{' '} {order?.shipping_address?.township?.name}{' '} {order?.shipping_address?.city?.name}
{groupedOrder.map((group, i) => { const orderStatus = getOrderStatus( group[0]?.status?.value?.toString(), t ); return (
{t('account.my_orders.detail.package_no')}: {i + 1} ({group.length}{' '} {t('account.my_orders.detail.items')})
{orderStatus.label}
{group[0]?.tracking_number && group[0]?.tracking_url && ( )}
{group.map((item, index) => { const itemStatus = getOrderStatus( item?.status?.value?.toString(), t ); return (
{item?.product?.name}
{item?.product?.name}
{item?.product?.attributes?.filterable_color && (
{t('account.my_orders.detail.color')} : {item?.product?.attributes?.filterable_color}
)} {item?.product?.attributes?.size && (
{t('account.my_orders.detail.size')} :{item?.product?.attributes?.size}
)}
{t('account.my_orders.detail.code')}:{' '} {item?.product?.base_code}
{itemStatus.label}
{(item?.is_cancellable || item?.is_refundable) && order?.is_cancellable && (
)}
{parseFloat(item?.retail_price || '0') > parseFloat(item?.price || '0') && ( )} parseFloat(item?.price || '0') })} value={item?.price} />
); })}
{group.map((item) => item.cancellationrequest_set?.map((cancellationItem) => { const status = cancellationItem.status?.value; const isRejected = status === 'rejected'; const isCompleted = status === 'completed'; const filteredImages = cancellationItem.cancellation_request_image_set?.filter( (img) => isRejected ? !img.is_uploaded_by_user : isCompleted ? img.is_uploaded_by_user : false ) || []; const statusText = isRejected ? t('account.my_orders.return.rejected') : isCompleted ? t('account.my_orders.return.completed') : null; if (!statusText || filteredImages.length === 0) return null; return (
{t('account.my_orders.return.return_status')} {statusText}
{filteredImages.map((img) => (
{img.description} {img.description && (

{t('account.my_orders.return.explanation')}: {img.description}

)}
))}
); }) )}
); })}

{t('account.my_orders.detail.subtotal')} ( {order?.orderitem_set?.length}{' '} {t('account.my_orders.detail.items')})

{order?.discountitem_set && order?.discountitem_set?.map((item, index) => (

{item?.name}

))}

{t('account.my_orders.detail.total')}

); }; export default AccountOrderDetail;